﻿using Common;
using gregn6Lib;
using NursingFormSystem.Common;
using NursingFormSystem.Model;
using SQLDLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace NursingFormSystem.FallsDropBed
{
    public partial class FallsDropPrint : Form
    {
        #region 变量声明
        private GridppReport Report = new GridppReport();
        NurFormsService.NursingForm formService = new NurFormsService.NursingForm();
        PatientInfo PatientInfo;
        DateTime Start;
        DateTime End;
        Tb_User LoginUser;
        ElectronicSignature es;
        #endregion
        #region 构造函数
        public FallsDropPrint(Tb_User loginUser, PatientInfo patientInfo, DateTime StartDate, DateTime EndDate)
        {
            InitializeComponent();
            PatientInfo = patientInfo;
            LoginUser = loginUser;
            Start = StartDate;
            End = EndDate;
            es = new ElectronicSignature(this.LoginUser);
            //载入报表模板数据
            Report.LoadFromFile(System.Windows.Forms.Application.StartupPath + @"\GRFModel\Ydhl_GRF\住院病人跌倒-坠床风险评估护理单.grf");
            //设置与数据源的连接串，因为在设计时指定的数据库路径是绝对路径。
            Report.ConnectionString = Utility.GetDatabaseConnectionString();
            //连接报表取数事件
            Report.FetchRecord += new _IGridppReportEvents_FetchRecordEventHandler(ReportFetchRecord);
            //设定查询显示器关联的报表
            axGRPrintViewer1.Report = Report;
        }
        #endregion

        #region 连接报表取数事件
        private void ReportFetchRecord()
        {
            var ret = formService.GetNursingFormRecordByDate(PatientInfo.PATIENT_ID, PatientInfo.VISIT_ID, (int)FormType.FallDown, Start, End);
            DataTable dt = new DataTable();
            if (ret.Code == 1)
            {
                CreateDateTableHead(dt);
                List<NursingFormRecord> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<NursingFormRecord>>(ret.D);
                if (list == null || list.Count <= 0) return;
                list = list.OrderByDescending(p => p.AssessmentDate).ToList();
                FallDown new_ps = XmlUtil.XMLToObject<FallDown>(list[0].NursingFormData, Encoding.UTF8);
                //患者/家属签字  与患者关系 预防效果 预防效果文本 出院日期
                foreach (var item in list)
                {
                    NursingFormRecord rd = item;
                    FallDown ps = XmlUtil.XMLToObject<FallDown>(rd.NursingFormData, Encoding.UTF8);
                    new_ps = ps;
                    if (!string.IsNullOrEmpty(new_ps.HuanZheJiaShuQianZi)) break;
                    if (!string.IsNullOrEmpty(new_ps.YuHuanZheGuanXi)) break;
                    if (!string.IsNullOrEmpty(new_ps.YuFangXiaoGuo) && new_ps.YuFangXiaoGuo.IndexOf("1") >= 0) break;
                    if (!string.IsNullOrEmpty(new_ps.YuFangXiaoGuo_Text)) break;
                    if (!string.IsNullOrEmpty(new_ps.ChuYuanRiQi)) break;
                }

                for (int i = 0; i < list.Count; i++)
                {
                    NursingFormRecord rd = list[i];
                    FallDown ps = XmlUtil.XMLToObject<FallDown>(rd.NursingFormData, Encoding.UTF8);
                    string image1 = "";
                    string HS = ps.PingGuXiangMu.ZeRenHuShiQingZi;
                    if (!string.IsNullOrEmpty(HS))
                    {
                        image1 = es.GetElectricSignBase64(rd.AreaId, ps.PingGuXiangMu.ZeRenHuShiQingZi);
                    }
                    string image2 = "";
                    string HSZ = ps.PingGuXiangMu.HuShiZhangQianZi;
                    if (!string.IsNullOrEmpty(HSZ))
                    {
                        image2 = es.GetElectricSignBase64(rd.AreaId, ps.PingGuXiangMu.HuShiZhangQianZi);
                    }
                    DataRow row = dt.NewRow();
                    row["IN_DEPARTMENT_DATE"] = PatientInfo.IN_DEPARTMENT_DATE;//入科时间
                    row["IN_DATE"] = PatientInfo.IN_DATE;//IN_DATE 入院时间
                    row["PatientName"] = PatientInfo.PATIENT_NAME;
                    row["SEX"] = PatientInfo.SEX;//SEX
                    row["AGE"] = PatientInfo.AGE;//AGE
                    row["NURSE_CELL_NAME"] = PatientInfo.NURSE_CELL_NAME;//NURSE_CELL_NAME,
                    row["DEPARTMENT_NAME"] = PatientInfo.DEPARTMENT_NAME;//DEPARTMENT_NAME,
                    row["BED_NO"] = PatientInfo.BED_NO;//BED_NO,
                    row["PatientId"] = PatientInfo.PATIENT_ID;//PATIENTID
                    row["DIAGNOSE"] = PatientInfo.DIAGNOSE;//DIAGNOSE
                    row["ChuYuanRiQi"] = new_ps.ChuYuanRiQi;//出院日期
                    row["AssessmentDate"] = ps.PingGuXiangMu.RiQi;//评估日期
                    row["NianLin1"] = ps.PingGuXiangMu.NianLin.Substring(0, 1) == "0" ? "" : "2";//年龄： ≥65岁，〈80岁
                    row["NianLin2"] = ps.PingGuXiangMu.NianLin.Substring(2, 1) == "0" ? "" : "10";//年龄： ≥80岁
                    row["JiWangShi1"] = ps.PingGuXiangMu.JiWangShi.Substring(0, 1) == "0" ? "" : "2";//既往史： 6个月内曾跌倒
                    row["JiWangShi2"] = ps.PingGuXiangMu.JiWangShi.Substring(2, 1) == "0" ? "" : "1";//既往史： ≥2个医疗诊断
                    row["HuoDongNengLi1"] = ps.PingGuXiangMu.HuoDongNengLi.Substring(0, 1) == "0" ? "" : "3";//活动能力： 不太不稳/虚弱/肢体乏力
                    row["HuoDongNengLi2"] = ps.PingGuXiangMu.HuoDongNengLi.Substring(2, 1) == "0" ? "" : "2";//活动能力： 使用助行工具
                    row["YiShiZhuangTai1"] = ps.PingGuXiangMu.YiShiZhuangTai == "0" ? "2" : "";//意识状态： 模糊/躁动/定向力障碍/幻觉
                    row["GanJueZhangAi1"] = ps.PingGuXiangMu.GanJueZhangAi == "0" ? "2" : "";//感觉障碍： 视力障碍/头晕/听力障碍
                    row["YongYaoQingKuang1"] = ps.PingGuXiangMu.YongYaoQingKuang.Substring(0, 1) == "0" ? "" : "1";//用药情况： 一种情况
                    row["YongYaoQingKuang2"] = ps.PingGuXiangMu.YongYaoQingKuang.Substring(2, 1) == "0" ? "" : "2";//用药情况： 两种或以上情况
                    row["PaiXieWenTi1"] = ps.PingGuXiangMu.PaiXieWenTi == "0" ? "2" : "";//排泄问题： 尿频/尿急/腹泻
                    row["ZhiLiaoYinSu1"] = ps.PingGuXiangMu.ZhiLiaoYinSu == "0" ? "2" : "";//治疗因素： 输脉输液
                    row["ZongFen"] = ps.PingGuXiangMu.ZongFen;//总分：可耐受 1#1#1#1#1#1#1#1#1#1#1#1#
                    row["HuLiCuoShi1"] = ps.PingGuXiangMu.HuLiCuoShi.Substring(0, 1) == "0" ? "" : "√";//护理措施：1介绍病房环境、教会患者使用呼叫器及床护栏;下床时先放下床栏，切勿翻越，必要时呼叫协助
                    row["HuLiCuoShi2"] = ps.PingGuXiangMu.HuLiCuoShi.Substring(2, 1) == "0" ? "" : "√";//护理措施：2.保持地面无水渍，无障碍物，病室灯光充足
                    row["HuLiCuoShi3"] = ps.PingGuXiangMu.HuLiCuoShi.Substring(4, 1) == "0" ? "" : "√";//护理措施：3.告知并知道患者及家属预防跌倒
                    row["HuLiCuoShi4"] = ps.PingGuXiangMu.HuLiCuoShi.Substring(6, 1) == "0" ? "" : "√";//护理措施：4.指导患者穿长短适宜的衣裤及防滑鞋，勿赤足
                    row["HuLiCuoShi5"] = ps.PingGuXiangMu.HuLiCuoShi.Substring(8, 1) == "0" ? "" : "√";//护理措施：5.在患者床头悬挂“预防跌倒/坠床”标识
                    row["HuLiCuoShi6"] = ps.PingGuXiangMu.HuLiCuoShi.Substring(10, 1) == "0" ? "" : "√";//护理措施：6.呼叫器及日常物品置放于患者易取处
                    row["HuLiCuoShi7"] = ps.PingGuXiangMu.HuLiCuoShi.Substring(12, 1) == "0" ? "" : "√";//护理措施：7.定时提供便器/协助患者如厕
                    row["HuLiCuoShi8"] = ps.PingGuXiangMu.HuLiCuoShi.Substring(14, 1) == "0" ? "" : "√";//护理措施：8.督促使用助行器
                    row["HuLiCuoShi9"] = ps.PingGuXiangMu.HuLiCuoShi.Substring(16, 1) == "0" ? "" : "√";//护理措施：9.使用床栏或适当约束
                    row["HuLiCuoShi10"] = ps.PingGuXiangMu.HuLiCuoShi.Substring(18, 1) == "0" ? "" : "√";//护理措施：10.指导长时间卧床或使用特殊药物的患者下床时，先坐在床沿片刻再起立行走，必要时协助上下床
                    row["HuLiCuoShi11"] = ps.PingGuXiangMu.HuLiCuoShi.Substring(20, 1) == "0" ? "" : "√";//护理措施：11.告知患者及家属服用特殊药物的注意事项
                    row["HuLiCuoShi12"] = ps.PingGuXiangMu.HuLiCuoShi.Substring(22, 1) == "0" ? "" : "√";//护理措施：12.告知家属加强陪伴
                    row["ZeRenHuShiQingZi"] = !Base.ESSwitch.Equals("on") ? ps.PingGuXiangMu.ZeRenHuShiQingZi : "";//责任护士签字
                    row["HuShiZhangQianZi"] = !Base.ESSwitch.Equals("on") ? ps.PingGuXiangMu.HuShiZhangQianZi : "";//护士长签字
                    row["HuanZheJiaShuQianZi"] = new_ps.HuanZheJiaShuQianZi;//患者/家属签字
                    row["YuHuanZheGuanXi"] = new_ps.YuHuanZheGuanXi;//与患者关系
                    row["YuFangXiaoGuo"] = new_ps.YuFangXiaoGuo;//预防效果 1#1 
                    row["YuFangXiaoGuo_Text"] = new_ps.YuFangXiaoGuo_Text;
                    row["ElectricSignBase641"] = image1;
                    row["ElectricSignBase642"] = image2;
                    dt.Rows.Add(row);
                }
                //将 DataTable 的数据转储到 Grid++Report 的数据集中
                Utility.FillRecordToReport(Report, dt);
            }
            else if (ret.Code == 2)
            {
                CreateDateTableHead(dt);
                DataRow dr = dt.NewRow();
                dt.Rows.Add(dr);
                Utility.FillRecordToReport(Report, dt);
            }
            else if (ret.Code == 0)
            {
                MessageBox.Show(ret.M);
            }
        }

        private static void CreateDateTableHead(DataTable dt)
        {
            dt.Columns.Add("IN_DEPARTMENT_DATE", typeof(string));
            dt.Columns.Add("IN_DATE", typeof(string));
            dt.Columns.Add("PatientName", typeof(string));
            dt.Columns.Add("SEX", typeof(string));
            dt.Columns.Add("AGE", typeof(string));
            dt.Columns.Add("NURSE_CELL_NAME", typeof(string));
            dt.Columns.Add("DEPARTMENT_NAME", typeof(string));
            dt.Columns.Add("BED_NO", typeof(string));
            dt.Columns.Add("PatientId", typeof(string));
            dt.Columns.Add("DIAGNOSE", typeof(string));
            dt.Columns.Add("ChuYuanRiQi", typeof(string));//出院日期
            dt.Columns.Add("AssessmentDate", typeof(DateTime));//评估日期
            dt.Columns.Add("NianLin1", typeof(string));//年龄： ≥65岁，〈80岁
            dt.Columns.Add("NianLin2", typeof(string));//年龄： ≥80岁
            dt.Columns.Add("JiWangShi1", typeof(string));//既往史： 6个月内曾跌倒
            dt.Columns.Add("JiWangShi2", typeof(string));//既往史： ≥2个医疗诊断
            dt.Columns.Add("HuoDongNengLi1", typeof(string));//活动能力： 不太不稳/虚弱/肢体乏力
            dt.Columns.Add("HuoDongNengLi2", typeof(string));//活动能力： 使用助行工具
            dt.Columns.Add("YiShiZhuangTai1", typeof(string));//意识状态： 模糊/躁动/定向力障碍/幻觉
            dt.Columns.Add("GanJueZhangAi1", typeof(string));//感觉障碍： 视力障碍/头晕/听力障碍
            dt.Columns.Add("YongYaoQingKuang1", typeof(string));//用药情况： 一种情况
            dt.Columns.Add("YongYaoQingKuang2", typeof(string));//用药情况： 两种或以上情况
            dt.Columns.Add("PaiXieWenTi1", typeof(string));//排泄问题： 尿频/尿急/腹泻
            dt.Columns.Add("ZhiLiaoYinSu1", typeof(string));//治疗因素： 输脉输液
            dt.Columns.Add("ZongFen", typeof(string));//总分
            dt.Columns.Add("HuLiCuoShi1", typeof(string));//护理措施：1介绍病房环境、教会患者使用呼叫器及床护栏;下床时先放下床栏，切勿翻越，必要时呼叫协助
            dt.Columns.Add("HuLiCuoShi2", typeof(string));//护理措施：2.保持地面无水渍，无障碍物，病室灯光充足
            dt.Columns.Add("HuLiCuoShi3", typeof(string));//护理措施：3.告知并知道患者及家属预防跌倒
            dt.Columns.Add("HuLiCuoShi4", typeof(string));//护理措施：4.指导患者穿长短适宜的衣裤及防滑鞋，勿赤足
            dt.Columns.Add("HuLiCuoShi5", typeof(string));//护理措施：5.在患者床头悬挂“预防跌倒/坠床”标识
            dt.Columns.Add("HuLiCuoShi6", typeof(string));//护理措施：6.呼叫器及日常物品置放于患者易取处
            dt.Columns.Add("HuLiCuoShi7", typeof(string));//护理措施：7.定时提供便器/协助患者如厕
            dt.Columns.Add("HuLiCuoShi8", typeof(string));//护理措施：8.督促使用助行器
            dt.Columns.Add("HuLiCuoShi9", typeof(string));//护理措施：9.使用床栏或适当约束
            dt.Columns.Add("HuLiCuoShi10", typeof(string));//护理措施：10.指导长时间卧床或使用特殊药物的患者下床时，先坐在床沿片刻再起立行走，必要时协助上下床
            dt.Columns.Add("HuLiCuoShi11", typeof(string));//护理措施：11.告知患者及家属服用特殊药物的注意事项
            dt.Columns.Add("HuLiCuoShi12", typeof(string));//护理措施：12.告知家属加强陪伴
            dt.Columns.Add("ZeRenHuShiQingZi", typeof(string));//责任护士签字
            dt.Columns.Add("HuShiZhangQianZi", typeof(string));//护士长签字
            dt.Columns.Add("HuanZheJiaShuQianZi", typeof(string));//患者/家属签字
            dt.Columns.Add("YuHuanZheGuanXi", typeof(string));//与患者关系
            dt.Columns.Add("YuFangXiaoGuo", typeof(string));//预防效果
            dt.Columns.Add("YuFangXiaoGuo_Text", typeof(string));//预防效果文本
            dt.Columns.Add("ElectricSignBase641", typeof(string));
            dt.Columns.Add("ElectricSignBase642", typeof(string));

        }
        #endregion

        #region 窗体加载启动锐浪报表
        private void FallsDropPrint_Load(object sender, EventArgs e)
        {
            axGRPrintViewer1.Start();
        }
        #endregion
    }
}